import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class demo {
//    参数解析△
//    在命令行输入如下命令：
//xcopy /s c:\\ d:\\e，
//各个参数如下：
//参数1：命令字xcopy
//参数2：字符串/s
//参数3：字符串c:\\
//参数4: 字符串d:\\e
//请编写一个参数解析程序，实现将命令行各个参数解析出来。
//解析规则：
//1.参数分隔符为空格
//2.对于用""包含起来的参数，如果中间有空格，不能解析为多个参数。比如在命令行输入xcopy /s "C:\\program files" "d:\"时，参数仍然是4个，
//第3个参数应该是字符串C:\\program files，而不是C:\\program，注意输出参数时，需要将""去掉，引号不存在嵌套情况。
//3.参数不定长
//4.输入由用例保证，不会出现不符合要求的输入

    //输入：
//      xcopy /s c:\\ d:\\e
//输出：
//      4
//      xcopy
//      /s
//      c:\\
//      d:\\e
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        int count = 0;//参数个数
        for(int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == '"') {
//                遇到第一个"时  继续往下走直到遇到第二个"   可以用do while循环
//                条件是tr.charAt(i) != '"'   才能继续进入循环中
                do{
                    i++;
                }while(str.charAt(i) != '"');
            }
//            除了""内部的空格 外部每遇到一个空格都算一个参数  最后要记得加一 因为最后一个参数后没有空格
            if(str.charAt(i) == ' ') {
                count++;
            }
        }
        System.out.println(count + 1);

        int flag = 1;//判断是否在""内部  1循环没走到字符串内部   -1循环走到字符串内部
        for(int i =0; i < str.length(); i++) {
            if(str.charAt(i) == '"') {
                flag = -flag;
            }
//            除了空格和双引号都打印
            if(str.charAt(i) != ' ' && str.charAt(i) != '"') {
                System.out.print(str.charAt(i));
            }
//            在双引号内部  遇到空格打印空格
            if(str.charAt(i) == ' ' && flag == -1) {
                System.out.print(' ');
            }
//            在双引号外部  遇到空格 换行
            if(str.charAt(i) == ' ' && flag == 1) {
                System.out.println();
            }
        }
    }









//    跳石板
//    小易来到了一条石板路前，每块石板上从1挨着编号为：1、2、3.......
//这条石板路要根据特殊的规则才能前进：对于小易当前所在的编号为K的 石板，
// 小易单次只能往前跳K的一个约数(不含1和K)步，即跳到K+X(X为K的一个非1和本身的约数)的位置。
// 小易当前处在编号为 N 的石板，他想跳到编号恰好为 M 的石板去，小易想知道最少需要跳跃几次可以到达。
//    N = 4，M = 24：
//    4->6->8->12->18->24
//    于是小易最少需要跳跃5次，就可以从4号石板跳到24号石板
//    输出小易最少需要跳跃的步数,如果不能到达输出-1


    //    div函数求约数 保存在链表中
    public static List<Integer> div(int n) {
        List<Integer> list = new ArrayList<>();
        for(int i = 2; i * i <= n; i++) {
            if(n % i == 0) {
                list.add(i);
                list.add(n/i);
            }
        }
        return list;
    }
    public static void main2(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
//        创建arr多一个空间 方便后续计算  从下表n开始到m
        int[] arr = new int[m+1];
//        将数组都用Integer.MAX_VALUE赋值
        for(int i = n; i <= m; i++) {
            arr[i] = Integer.MAX_VALUE;
        }
        arr[n] = 0;//后续判断 条件 这个非常重要

//        开始遍历数组
        for(int i = n; i <= m; i++) {
            if(arr[i] != Integer.MAX_VALUE) {
                List<Integer> list = div(i);
//                x代表此时我们一步可以条几个台阶
                for(int x : list) {
                    if(x + i <= m && arr[i + x] == Integer.MAX_VALUE) {
                        arr[i + x] = arr[i] + 1;
                    }else if(x + i <= m && arr[i + x] != Integer.MAX_VALUE) {
                        arr[i + x] = Math.min(arr[i] + 1, arr[i+x]);
                    }
                }
            }
        }
        if(arr[m] == Integer.MAX_VALUE) {//到达不了的情况
            System.out.println(-1);
        }else {
            System.out.println(arr[m]);
        }

    }
}
